#==================================================
#	Override Func
#==================================================
# 重写方法
#==================================================
# @path: res://addons/code_editor_menu_button/plugin/override/OverrideFunc.gd
# @datetime: 2021-7-4 22:21:13
#==================================================
tool
extends ConfirmationDialog


signal ok(data_list)
signal cancel

const OverrideCheckBox = preload("OverrideCheckBox.tscn")

var editor_interface : EditorInterface

onready var custom_method = $Margin/VBox/Container/Margin/VBox/Custom
onready var sep_panel = $Margin/VBox/Container/Margin/VBox/Panel


#============================================================
#   内置方法
#============================================================
func _ready():
	get_ok().connect("pressed", self, '_on_OK_pressed')
	get_cancel().connect("pressed", self, "_on_Cancel_pressed")


#============================================================
#   自定义方法
#============================================================
##  清除所有子节点
func clear_children():
	for child in custom_method.get_children():
		child.queue_free()


##  展示方法列表
## @method_list  方法数据列表
func show_method_list(script: Script) -> void:
	clear_children()
	
	# 设置参数
	var data = _CodeEditor_ScriptMethodDataList.parse_script_data(script)
	for path in data:
		var p = sep_panel.duplicate()
		custom_method.add_child(p)
		
		var label = Label.new()
		label.text = path
		custom_method.add_child(label)
		
		for method_data in data[path]:
			var checkbox = OverrideCheckBox.instance()
			checkbox.set_editor_interface(editor_interface)
			checkbox.set_data(method_data)
			custom_method.add_child(checkbox)


#============================================================
#   连接信号
#============================================================
func _on_OK_pressed():
	# 获取勾选的 CheckBox 的数据
	var data_list = []
	for child in custom_method.get_children():
		if (child.has_method("is_pressed") 
			and child.is_pressed()
		):
			data_list.push_back(child.data)
	emit_signal("ok", data_list)
	self.hide()


func _on_Cancel_pressed():
	self.hide()
	emit_signal("cancel")

